// API配置和网络请求工具
const API_BASE_URL = 'http://127.0.0.1:8888'

// 网络请求封装
function request(options) {
  return new Promise((resolve, reject) => {
    // 检查网络状态
    wx.getNetworkType({
      success: (res) => {
        if (res.networkType === 'none') {
          wx.showToast({
            title: '网络不可用',
            icon: 'error'
          })
          reject(new Error('网络不可用'))
          return
        }
      }
    })

    // 获取token
    const userInfo = wx.getStorageSync('userInfo')
    const token = userInfo ? userInfo.token : null

    wx.request({
      url: API_BASE_URL + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'Content-Type': 'application/json',
        'Authorization': token ? `Bearer ${token}` : ''
      },
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data)
        } else if (res.statusCode === 401) {
          console.error('认证失败，需要重新登录:', res)
          // 清除登录信息
          const app = getApp()
          if (app) {
            app.logout()
          }
          // 跳转到登录页
          wx.showToast({
            title: '登录已过期，请重新登录',
            icon: 'none',
            duration: 2000
          })
          setTimeout(() => {
            wx.redirectTo({
              url: '/pages/login/login'
            })
          }, 1500)
          reject(res)
        } else {
          console.error('API请求失败:', res)
          wx.showToast({
            title: res.data || '请求失败',
            icon: 'none',
            duration: 2000
          })
          reject(res)
        }
      },
      fail: (err) => {
        console.error('网络请求失败:', err)
        let errorMessage = '网络请求失败'

        if (err.errMsg && err.errMsg.includes('url not in domain list')) {
          errorMessage = '请在开发者工具中关闭域名校验'
        } else if (err.errMsg && err.errMsg.includes('timeout')) {
          errorMessage = '请求超时，请检查网络'
        } else if (err.errMsg && err.errMsg.includes('fail')) {
          errorMessage = '无法连接到服务器'
        }

        wx.showToast({
          title: errorMessage,
          icon: 'none',
          duration: 3000
        })
        reject(err)
      }
    })
  })
}

// API接口定义
const API = {
  // 用户登录
  login: (data) => request({
    url: '/api/auth/login',
    method: 'POST',
    data: data
  }),

  // 微信登录
  wechatLogin: (data) => request({
    url: '/api/auth/wechat/login',
    method: 'POST',
    data: data
  }),

  // 获取油品类型
  getFuelTypes: () => request({
    url: '/api/fuel/types',
    method: 'GET'
  }),

  // 创建订单
  createOrder: (data) => request({
    url: '/api/fuel/order',
    method: 'POST',
    data: data
  }),

  // 获取订单列表
  getOrderList: (params) => request({
    url: '/api/order/list',
    method: 'GET',
    data: params
  }),

  // 获取订单详情
  getOrderDetail: (id) => request({
    url: `/api/order/${id}`,
    method: 'GET'
  }),

  // 完成订单
  completeOrder: (data) => request({
    url: '/api/order/complete',
    method: 'POST',
    data: data
  }),

  // 微信支付
  wechatPay: (data) => request({
    url: '/api/payment/wechat/pay',
    method: 'POST',
    data: data
  }),

  // 创建支付订单（支付前）
  createPaymentOrder: (data) => request({
    url: '/api/payment/create',
    method: 'POST',
    data: data
  }),

  // 管理员接口
  admin: {
    // 更新油品价格
    updateFuelPrice: (data) => request({
      url: '/api/admin/fuel/price',
      method: 'POST',
      data: data
    }),

    // 获取库存信息
    getInventory: () => request({
      url: '/api/admin/inventory',
      method: 'GET'
    }),

    // 更新库存
    updateInventory: (data) => request({
      url: '/api/admin/inventory',
      method: 'POST',
      data: data
    }),

    // 获取销售报表
    getSalesReport: (params) => request({
      url: '/api/admin/report/sales',
      method: 'GET',
      data: params
    })
  }
}

module.exports = {
  API,
  API_BASE_URL
}